A typical operating system does not know what executable software resides on the machine nor does it know what resources are needed by the software to execute. It follows, therefore, that the operating system can have no knowledge of how or if one piece of software depends on another and will be unable to determine if a particular piece of software will run.
An application that is written to be run by a current operating system typically assumes that it will have access to a global namespace, used to resolve names and obtain values and resources. A number of drawbacks are associated with the use of a global namespace. It is difficult to keep track of the state and configuration parameters of an application, especially if the application can be run concurrently at the system-wide level and at a user level, because configuration parameters and current state are stored in the global namespace and no structure for distinguishing system-wide versus user-specific values for the application is provided by the operating system. Secondly, machine resources accessed via a global namespace are shared by all the applications running on the machine. Applications can interfere with each other via this global shared namespace. For example, one executing application may store its state in a file of a particular name in the global namespace. A second application may store its state in a file of the same name. If the applications execute concurrently, the applications may overwrite each other's state. Additionally, access to the resources is typically controlled by ACLs (access control lists) which associate access privileges with the identity of the user running the application. It follows that an application may well have access to resources that it does not need, enabling a malicious user to compromise the integrity of the system. Finally, use of a global namespace may prevent an application from being easily used to perform a slightly different task than the one for which it was originally intended. For example, an application which translates text from English to Spanish may expect the input and output files to have particular names, making it difficult to use the application to accept a different input file and produce a different output file without modifying the code.